/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.unirio.pf.controle;

import br.unirio.pf.clientesESB.Clientes;
import br.unirio.pf.service.Imovel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Ricardo
 */
public class ImovelServlet extends BaseServlet {
    
    private List<String> abrangenciaOnline = new ArrayList<String>();
    private List<String> abrangenciaInglesa = new ArrayList<String>();
    private List<String> abrangenciaAlema = new ArrayList<String>();
    List<Imovel> listaCompleta = new ArrayList<Imovel>();
    int id;
    String cnpj;
    
    public ImovelServlet(){
        super();
    }
    
    @Override
    protected void antesPesquisar(HttpServletRequest request,HttpServletResponse response) throws Exception{
        abrangenciaOnline = Clientes.abrangenciaOnline();
        abrangenciaInglesa = Clientes.abrangenciaInglesa();
        abrangenciaAlema = Clientes.abrangenciaAlema();
        
        List<String> listaBairros = new ArrayList<String>();
        
        int tamOnline = abrangenciaOnline.size();
        int tamInlgesa = abrangenciaInglesa.size();
        int tamAlema = abrangenciaAlema.size();
        
        for(int i=0;i<tamOnline;i++)listaBairros.add(abrangenciaOnline.get(i));
        for(int i=0;i<tamInlgesa;i++)listaBairros.add(abrangenciaInglesa.get(i));
        for(int i=0;i<tamAlema;i++)listaBairros.add(abrangenciaAlema.get(i));
        
        request.setAttribute("listaBairros", listaBairros);
        
        RequestDispatcher rd = request.getRequestDispatcher("/pages/pesquisarImoveis.jsp");
        rd.forward(request, response);
    }
    
    @Override
    protected void pesquisar(HttpServletRequest request,HttpServletResponse response) throws Exception{
        String cpf = request.getParameter("CPF");
        String[] bairros = request.getParameterValues("bairro");
        
        double valMin = 0;
        if(!request.getParameter("valMin").isEmpty()) valMin = Double.valueOf(request.getParameter("valMin"));
                    
        double valMax = Double.MAX_VALUE;
        if(!request.getParameter("valMax").isEmpty()) valMax = Double.valueOf(request.getParameter("valMax"));
        
        int numQuartos = Integer.valueOf(request.getParameter("numQuartos"));
        boolean posVagGaragem = Boolean.valueOf(request.getParameter("posVagGaragem"));
        String horSol = request.getParameter("horSol");
        
        List<String> bairrosPesquisados = new ArrayList<String>();
        bairrosPesquisados.addAll(Arrays.asList(bairros));
        
        //Registra a pesquisa
        Clientes.registrarPesquisa(cpf, bairrosPesquisados, valMin, valMax, numQuartos, posVagGaragem, horSol);
        
        List<String> listaBairrosOnline = new ArrayList<String>();
        List<String> listaBairrosInglesa = new ArrayList<String>();
        List<String> listaBairrosAlema = new ArrayList<String>();
        
        for(int i=0;i<bairros.length;i++){
            for(int j=0;j<abrangenciaOnline.size();j++){
                if(bairros[i].equals(abrangenciaOnline.get(j)))listaBairrosOnline.add(bairros[i]);
            }
            for(int j=0;j<abrangenciaInglesa.size();j++){
                if(bairros[i].equals(abrangenciaInglesa.get(j)))listaBairrosInglesa.add(bairros[i]);
            }
            for(int j=0;j<abrangenciaAlema.size();j++){
                if(bairros[i].equals(abrangenciaAlema.get(j)))listaBairrosAlema.add(bairros[i]);
            }
        }
        
        //Pesquisa na Online se buscou algum bairro da Online
        List<Imovel> listarOnline = new ArrayList<Imovel>();
        if(!listaBairrosOnline.isEmpty()){
            listarOnline = Clientes.listarOnline(listaBairrosOnline, valMin, valMax, numQuartos, posVagGaragem, horSol);
        }
        
        //Pesquisa na Inglesa se buscou algum bairro da Inglesa
        List<Imovel> listarInglesa = new ArrayList<Imovel>();
        if(!listaBairrosInglesa.isEmpty()){
            listarInglesa = Clientes.listarInglesa(listaBairrosInglesa, valMin, valMax, numQuartos, posVagGaragem, horSol);
        }
        
        //Pesquisa na Alema se buscou algum bairro da Alema
        List<Imovel> listarAlema = new ArrayList<Imovel>();
        if(!listaBairrosAlema.isEmpty()){
            listarAlema = Clientes.listarAlema(listaBairrosAlema, valMin, valMax, numQuartos, posVagGaragem, horSol);
        }
        
        listaCompleta.clear();
        listaCompleta.addAll(listarOnline);
        listaCompleta.addAll(listarInglesa);
        listaCompleta.addAll(listarAlema);        
        
        request.setAttribute("listaCompleta", listaCompleta);
        
        if(listaCompleta.isEmpty()){
            String mensagem = "Nenhum im&oacute;vel encontrado!";
            request.setAttribute("mensagem", mensagem);
        }
        else{
            String mensagem = "Im&oacute;vel(is) encontrados:";
            request.setAttribute("mensagem", mensagem);
        }
        
        RequestDispatcher rd = request.getRequestDispatcher("/pages/listarImoveis.jsp");
        rd.forward(request, response);
    }
    
    @Override
    protected void detalharImovel(HttpServletRequest request,HttpServletResponse response) throws Exception{
        int index = Integer.valueOf(request.getParameter("index"));
        request.setAttribute("imovel", listaCompleta.get(index));
        RequestDispatcher rd = request.getRequestDispatcher("/pages/detalhesImovel.jsp");
        rd.forward(request, response);
    }
    
    @Override
    protected void antesSubmeterProposta(HttpServletRequest request,HttpServletResponse response) throws Exception{
        id = Integer.valueOf(request.getParameter("id"));
        cnpj = String.valueOf(request.getParameter("cnpj"));
        request.setAttribute("mensagem", "cadastrar");
        RequestDispatcher rd = request.getRequestDispatcher("/pages/dadosProposta.jsp");
        rd.forward(request, response);
    }
    
    @Override
    protected void submeterProposta(HttpServletRequest request,HttpServletResponse response) throws Exception{
        String nome = String.valueOf(request.getParameter("nome"));
        String cpf = String.valueOf(request.getParameter("CPF"));
        double valorProposta = Double.valueOf(request.getParameter("valorProposta"));
        String descricao = String.valueOf(request.getParameter("descricao"));
        
        boolean proposta = Clientes.registrarProposta(nome, cpf, cnpj, id, valorProposta, descricao);
        
        if(!proposta){
            String mensagem = "Proposta n&atilde;o cadastrada, tente novamente!";
            request.setAttribute("mensagem", mensagem);
        }
        else{
            String mensagem = "Proposta cadastrada com sucesso!";
            request.setAttribute("mensagem", mensagem);
        }		
        
        RequestDispatcher rd = request.getRequestDispatcher("/pages/dadosProposta.jsp"); 
        rd.forward(request, response);
    }
}
